/**
 *@brief 设备管理头文件
 *定义设备数据结构体及相关操作函数声明
*/
#ifndef DEVICE_H
#define DEVICE_H

#include "dlist.h"
#include "comm.h"

/**
 * @brief 设备结构体定义
*/
typedef struct device 
{
	//自动维护的数据, 用户不对其进行设置和修改
	int dev_id; // 设备号，如 10001;
	int dev_order; // 设备序号
	char dev_status; // 设备工作状态: 如 0: OFF 1: ON
	float cur_value; // 设备当前值
	//用户可以设置和修改的项目
	char dev_name[32]; //设备名，如 kitchen_light1,room_airconditioning
	char dev_type[32]; // 设备类型，如 switch,led,airconditioner,
	char dev_ip[16]; // 设备 IPv4 型如 IP: 192.168.31.111
	float power_ele; // 额定功率: 如 60W
} device_t;

// 函数声明
int generate_id();// 生成新设备ID

void showfun_dev_full(const void *data);// 完整显示设备信息

int cmpfun_dev_id(const void *data1, const void *data2);// 设备ID比较

int cmpfun_dev_name(const void *data1, const void *data2);// 设备名称比较

int cmpfun_dev_type(const void *data1, const void *data2);// 设备类型比较

int updatefun_dev_name(void *data1, const void *data2);// 更新设备名称

int updatefun_dev_type(void *data1, const void *data2);// 更新设备类型

int updatefun_dev_ip(void *data1, const void *data2);// 更新设备IP

node_t *load_dev();// 从文件加载设备数据

int save_dev(node_t *head);// 保存设备数据到文件

int add_dev(node_t *head, const device_t *newdev);// 添加新设备

int set_device_order(node_t *head);// 重建设备序号

node_t *find_dev(node_t *head,int mode, const device_t *cmpdev);// 查找设备

int del_dev(node_t *head,int mode, const device_t *dev);// 删除设备

node_t *update_dev(node_t *head,int id,updatefun_t updatefun,const device_t *updatedev);// 更新设备属性

int sort_dev(node_t *head, cmpfun_t cmpfun);// 设备链表排序

void show_dev(node_t *temp, showfun_t showfun);// 显示设备信息


#endif
